package com.xiumu.security;

import cn.hutool.core.codec.Base64Decoder;
import cn.hutool.core.codec.Base64Encoder;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;

import java.nio.charset.StandardCharsets;

public class Security {

    // 密钥
    public static String KEY = "zVvzigsRbE4IxICj";

    // 初始向量iv
    public static String IV = "aai5AXLpLxehRPgm";

    /**
     * 加密数据
     * @param data 原始数据
     * @return
     */
    public static String encrypt(String data) {
        // AES算法，设置加密工作模式，填充模式，密钥
        AES aes = new AES(Mode.CBC,Padding.PKCS5Padding,KEY.getBytes(StandardCharsets.UTF_8));
        // 设置初始向量
        aes.setIv(IV.getBytes(StandardCharsets.UTF_8));
        // 加密数据
        byte[] encryptData = aes.encrypt(data);
        // 返回Base64编码之后的密文
        return Base64Encoder.encode(encryptData);
    }

    /**
     * 对密文进行解密
     * @param encryptData  密文
     * @return
     */
    public static String decrypt(String encryptData) {
        // AES算法，设置加密工作模式，填充模式，密钥
        AES aes = new AES(Mode.CBC,Padding.PKCS5Padding,KEY.getBytes(StandardCharsets.UTF_8));
        // 设置初始向量
        aes.setIv(IV.getBytes(StandardCharsets.UTF_8));
        // 解密
        byte[] decryptData = aes.decrypt(Base64Decoder.decode(encryptData));
        // 返回解密之后的数据
        return new String(decryptData);
    }

    
    // 测试AES加密解密
    public static void main(String[] args) {

        // 原始数据
        String data = "人生除了生死，其余都是擦伤";

        String encryptData = encrypt(data);

        System.out.println(encryptData);

        String decryptData = decrypt(encryptData);
        System.out.println(decryptData);

    }

}
